在上一篇稍微了解Controller與Url的關係之後,接下來就說明如何建立一個新的Controller,在Controller資料夾按右鍵>加入>控制器
接著命名Controller的名稱,在這邊可以看到Default1被反白,就是提示這邊的字串是需要修改的喔,然後記得一定要是Controller結尾
接著輸入把Default1Controller改成TestController之後就會看到一個空白的MVC控制器被建立了,除了Controller名稱一定要是Controller結尾,透過觀察程式碼,發現還必須是公開類別,而且要繼承System.Web.Mvc.Controller類別。
另外也可以觀察到裡面預設會內建一個名稱為Index的Action
此時我們按Ctrl+F5偵錯專案,來存取TestController中的Index會是什麼結果,看過上篇解說之後應該知道Url要打什麼才能存取到TestController中的Index了吧XD
結果發生錯誤了!在說明錯誤之前,不知道有沒有發現到Url好像有點怪怪的,前一篇有說到路由衷的定義是{contorller}/{action},為什麼上面的網址只有controller的名稱,發生錯誤是很正常的吧?我們再來看一次RouteConfig.cs
我們可以觀察到上圖中的黃色框框有一個預設值,如果今天url沒有包含action資訊,路由會預設存取Index這個Action,所以今天存取http://localhost/Test/Index與http://localhost/Test/是一樣的結果喔,若今天url只打http://localhost/為什麼會去存取HomeController中的Index也是因為預設值的關係。
以前開發MVC專案都沒有特別去注意路由,反正感覺上就是加上Controller與Action就能存取到了,完全沒想過要去研究url為什麼是這樣設定,一直到了專案需要實作權限管控的功能,例如透過DB中的Table去設定某些使用者的角色可以存取的url路徑有哪些這樣,但那些設定跟實際專案的url路徑長得太不一樣,所以必須夠過去更改路由設定才有辦法符合權限管控Table設定的值,所以現在我開發專案都會特別注意Controller與url的關係,不然到專案後期才發現url格式不是最理想的,才在那邊大改路由的設定真的會瘋掉。
說了這麼多還是沒有提到為什麼Test中的Index會有錯誤訊息,就留著明天再繼續講吧XD
版大你好,作筆記時發現錯字
努力學習MVC中感謝版大的教學
錯字在內文中...
為什麼上面的網址只有"contoller"的名稱
→controller(想說寫起來怪怪的)